<template>
  <div class="dv-border-box-13" ref="borderBox13">
    <svg class="dv-border-svg-container" :width="width" :height="height">
      <path
        :fill="backgroundColor"
        :stroke="mergedColor[0]"
        :d="`
          M 5 20 L 5 10 L 12 3  L 60 3 L 68 10
          L ${width - 20} 10 L ${width - 5} 25
          L ${width - 5} ${height - 5} L 20 ${height - 5}
          L 5 ${height - 20} L 5 20
        `"
      />

      <path
        fill="transparent"
        stroke-width="3"
        stroke-linecap="round"
        stroke-dasharray="10, 5"
        :stroke="mergedColor[0]"
        :d="`M 16 9 L 61 9`"
      />

      <path
        fill="transparent"
        :stroke="mergedColor[1]"
        :d="`M 5 20 L 5 10 L 12 3  L 60 3 L 68 10`"
      />

      <path
        fill="transparent"
        :stroke="mergedColor[1]"
        :d="`M ${width - 5} ${height - 30} L ${width - 5} ${height - 5} L ${width - 30} ${height - 5}`"
      />
    </svg>

    <div class="border-box-content">
      <slot></slot>
    </div>
  </div>
</template>

<script>
import { cloneDeep, debounce, mergeDeep } from "../../../../utils/utils";
import { onMounted, ref, watch } from "vue";

  export default {
    name: "DvBorderBox13",
    props: {
      color: {
        type: Array,
        default: () => ([])
      },
      backgroundColor: {
        type: String,
        default: "transparent"
      }
    },
    setup(props) {
      const borderBox13 = ref(null);
      const defaultColor = ref(["#6586ec", "#2cf7fe"]);
      const mergedColor = ref([]);
      const width = ref(300);
      const height = ref(300);
      const mergeColor = () => {
        mergedColor.value = mergeDeep(cloneDeep(defaultColor.value), props.color || []);
      };
      watch(() => props.color, s => {
        mergeColor();
      });
      onMounted(() => {
        const ro = new ResizeObserver(entries => {
          handleResize(entries);
        });
        ro.observe(borderBox13.value);
        mergeColor();
      });
      const handleResize = debounce((entries) => {
        width.value = entries[0].contentRect.width;
        height.value = entries[0].contentRect.height;
      }, 100);
      return { width, height, borderBox13, mergedColor, mergeColor, handleResize, defaultColor };
    },
  };
</script>

<style scoped>
  .dv-border-box-13 {
    position: relative;
    width: 100%;
    height: 100%;
  }
  .dv-border-box-13 .dv-border-svg-container {
    position: absolute;
    width: 100%;
    height: 100%;
    top: 0px;
    left: 0px;
  }
  .dv-border-box-13 .border-box-content {
    position: relative;
    width: 100%;
    height: 100%;
  }
</style>
